package com.factory.rental.common;

import lombok.Data;
import org.springframework.data.domain.Page;

import java.io.Serializable;
import java.util.List;

/**
 * 分页响应结果封装类
 * @param <T> 返回数据的类型
 */
@Data
public class PageResult<T> implements Serializable {

    /**
     * 响应码
     */
    private Integer code;

    /**
     * 数据列表
     */
    private List<T> data;

    /**
     * 总记录数
     */
    private long totalPage;

    /**
     * 每页记录数
     */
    private int pageSize;

    /**
     * 当前页码
     */
    private int pageNum;


    public PageResult() {
    }

    public PageResult(Integer code, Page<T> page) {
        this.code = code;
        this.data = page.getContent();
        this.totalPage = page.getTotalPages();
        this.pageSize = page.getSize();
        this.pageNum = page.getNumber() + 1; // 转换为从1开始的页码
    }

    /**
     * 成功响应，分页数据
     * @param page 分页数据
     * @param <T> 返回数据的类型
     * @return PageResult
     */
    public static <T> PageResult<T> success(Page<T> page) {
        return new PageResult<>(200, page);
    }

    /**
     * 成功响应，分页数据
     * @param page 分页数据
     * @param code 响应码
     * @param <T> 返回数据的类型
     * @return PageResult
     */
    public static <T> PageResult<T> success(Page<T> page, Integer code) {
        return new PageResult<>(code, page);
    }
}